ass Solution {
public:
  class mycompare1{
      public:
    bool operator()(pair<int,int> left , pair<int,int> right)
   {
       return left.second > right.second;
   }
  };


    vector<int> topKFrequent(vector<int>& nums, int k) 
    {
        // 哈希表插入元素
        unordered_map<int,int> map;
        for (auto x : nums)
        {
            map[x]++;
        }

        // 使用一个小堆排序 仿函数大于是小堆 仿函数小于是大堆
        priority_queue<pair<int , int> , vector<pair<int , int>> , mycompare1> pque;

        unordered_map<int,int>::iterator it = map.begin();
        while(it != map.end())
        {
            pque.push(*it);
            if (pque.size() > k)
            {
                pque.pop();
            }

            it++;
        }

        vector<int> result(k);
        for (int i = k - 1; i >= 0; i--) {
            result[i] = pque.top().first;
            pque.pop();
        }
        return result;
    }
};
